basic account gating

This commit is contained in:
2026-02-19 22:51:44 -06:00
parent f6b4263faf
commit 1752d435df
3 changed files with 8 additions and 6 deletions
+1
View File
@@ -24,6 +24,7 @@ func Init() bool {
&models.AccessToken{}, &models.AccessToken{},
&models.UserAlbumAccess{}, &models.UserAlbumAccess{},
&models.Media{}, &models.Media{},
&models.Settings{},
) )
if err != nil { if err != nil {
log.Fatal("failed to migrate database: ", err) log.Fatal("failed to migrate database: ", err)
@@ -7,7 +7,7 @@ import { useNavigate } from 'react-router-dom'
import { useNotifier } from '../../contexts/useNotifier' import { useNotifier } from '../../contexts/useNotifier'
import AlbumEditModal from './AlbumEditModal' import AlbumEditModal from './AlbumEditModal'
export default function AlbumList({ currentAlbumName }) { export default function AlbumList({ currentAlbumName }) {
const { getAccessToken } = useAccount() const { getAccessToken, user } = useAccount()
const [open, setOpen] = useState(false) const [open, setOpen] = useState(false)
const [openEdit, setOpenEdit] = useState(false) const [openEdit, setOpenEdit] = useState(false)
const [editingAlbum, setEditingAlbum] = useState(null) const [editingAlbum, setEditingAlbum] = useState(null)
@@ -55,7 +55,7 @@ export default function AlbumList({ currentAlbumName }) {
<div className="flex flex-col items-center justify-start h-min w-full bg-[#141414]"> <div className="flex flex-col items-center justify-start h-min w-full bg-[#141414]">
<div className="flex flex-row items-center justify-between gap-2 w-full px-6 py-4"> <div className="flex flex-row items-center justify-between gap-2 w-full px-6 py-4">
<h1 className="text-xl font-bold text-white red-hat-display">Albums</h1> <h1 className="text-xl font-bold text-white red-hat-display">Albums</h1>
<PlusIcon className="w-6 h-6 cursor-pointer" color="white" onClick={() => setOpen(true)} /> <PlusIcon style={{ display: user?.IsAdmin ? 'block' : 'none' }} className="w-6 h-6 cursor-pointer" color="white" onClick={() => setOpen(true)} />
</div> </div>
<div className="flex flex-row items-center justify-start gap-2 w-full px-6 flex-wrap"> <div className="flex flex-row items-center justify-start gap-2 w-full px-6 flex-wrap">
{albums.map((album) => ( {albums.map((album) => (
@@ -76,7 +76,7 @@ export default function AlbumList({ currentAlbumName }) {
}} }}
> >
<p className="text-white red-hat-text">{album.Title}</p> <p className="text-white red-hat-text">{album.Title}</p>
<EllipsisVertical className="w-6 h-6 cursor-pointer" color="white" onClick={(e) => { <EllipsisVertical style={{ display: user?.IsAdmin ? 'block' : 'none' }} className="w-6 h-6 cursor-pointer" color="white" onClick={(e) => {
e.stopPropagation() e.stopPropagation()
setEditingAlbum(album) setEditingAlbum(album)
setOpenEdit(true) setOpenEdit(true)
@@ -7,8 +7,9 @@ import { useAccount } from '../../contexts/useAccount'
import { useNotifier } from '../../contexts/useNotifier' import { useNotifier } from '../../contexts/useNotifier'
import { useNavigate } from 'react-router-dom' import { useNavigate } from 'react-router-dom'
import * as Popover from '@radix-ui/react-popover' import * as Popover from '@radix-ui/react-popover'
export default function MediaList({ albumId, albumName }) { export default function MediaList({ albumId, albumName }) {
const { getAccessToken } = useAccount() const { getAccessToken, user } = useAccount()
const [open, setOpen] = useState(false) const [open, setOpen] = useState(false)
const [media, setMedia] = useState([]) const [media, setMedia] = useState([])
const [aspectRatios, setAspectRatios] = useState({}) const [aspectRatios, setAspectRatios] = useState({})
@@ -58,7 +59,7 @@ export default function MediaList({ albumId, albumName }) {
<div className="flex flex-col items-center justify-start w-full bg-[#141414]"> <div className="flex flex-col items-center justify-start w-full bg-[#141414]">
<div className="flex flex-row items-center justify-between gap-2 w-full px-6 py-4"> <div className="flex flex-row items-center justify-between gap-2 w-full px-6 py-4">
<h1 className="text-xl font-bold text-white red-hat-display">Media</h1> <h1 className="text-xl font-bold text-white red-hat-display">Media</h1>
<Upload className="w-6 h-6 cursor-pointer" color="white" onClick={() => setOpen(true)} /> <Upload style={{ display: user?.IsAdmin ? 'block' : 'none' }} className="w-6 h-6 cursor-pointer" color="white" onClick={() => setOpen(true)} />
</div> </div>
<MediaUploadModal <MediaUploadModal
open={open} open={open}
@@ -104,7 +105,7 @@ export default function MediaList({ albumId, albumName }) {
<button className="text-white px-1 py-1 rounded-md absolute top-2 right-2 cursor-pointer z-50" onClick={(e) => { <button className="text-white px-1 py-1 rounded-md absolute top-2 right-2 cursor-pointer z-50" onClick={(e) => {
e.stopPropagation() e.stopPropagation()
}}> }}>
<EllipsisVertical className="w-4 h-4" /> <EllipsisVertical style={{ display: user?.IsAdmin ? 'block' : 'none' }} className="w-4 h-4" />
</button> </button>
</Popover.Trigger> </Popover.Trigger>
<Popover.Portal> <Popover.Portal>