Thay vì tách từng quyền thành các cột riêng lẻ hoặc bảng máy chủ sql, chúng tôi đang xem xét lại việc sử dụng thuộc tính Flag
để Enum
để sử dụng với các hoạt động khôn ngoan. Ứng dụng của chúng tôi xác định điểm cuối (không phải là điểm từ dịch vụ nghỉ) để truy cập tài nguyên (đọc, sửa đổi, cập nhật) và mỗi người dùng được hưởng quyền truy cập ví dụ Bob has permissions to Read, Modify resource X
vì vậy khi bob đến và truy cập tài nguyên này, chúng tôi kiểm tra xem liệu bob có quyền x.Now hay không rằng nơi chúng ta sẽ áp dụng điều này là rõ ràng đây là sự nghi ngờ của tôiEnums để xác định các bộ quyền trong C#
Giả sử Bob có đọc, Viết, Xóa phép về tài nguyên sử dụng enumerations được gắn cờ tôi sẽ làm
Permission.Read | Permission.Write | Permission.Delete
là kết quả cuối cùng của chút khôn ngoan và một nguyên hoặc Enum khác?Để lưu trữ quyền này trong bảng cơ sở dữ liệu, cột có phải là
integer
không?Nếu câu trả lời cho câu hỏi 1 là
Enum
thì tôi có nên xác định một thuộc tính khác trênPermissions
enum đại diện cho giá trị nguyên của Bit khôn ngoan và hoạt động không?
disclaimer:
Bob được đề cập trong ví dụ này không đại diện cho bất kỳ người dùng nào trong mạng tràn của trang web hoặc bất kỳ người nào. Nó chỉ là một ký tự khác
@Mathhew chỉ cần tắt đầu của tôi Lưu trữ kết quả của bitwise OR trong bảng như số nguyên. Làm thế nào tôi nên làm cho tôi kiểm tra sự cho phép trong ứng dụng. nói trong mã ở đây 'if (IntegerFromDb == Permissions.Read) {print" Success! "; } 'nên ** tôi phân tích cú pháp Integer thành Enum of type Permissions ** và thực hiện kiểm tra? – Deeptechtons
@Deeptechtons: Bạn có thể truyền bất kỳ số nguyên nào trở lại kiểu enum một cách dễ dàng: 'var perms = (Permissions) IntegerFromDb'. Đây là cách an toàn nhất, tuy nhiên tôi nghĩ rằng bạn có thể so sánh trực tiếp với mã tôi đã đưa vào ở trên mà không cần một diễn viên. Luôn luôn so sánh '&' với giá trị mong đợi, đặc biệt nếu sử dụng các giá trị kết hợp như 'ReadWrite' được đề xuất bởi vì nó có thể có một và không phải là giá trị khác và đánh dấu kiểm tra kiểu'! = None'. –
@Deeptechtons: Hãy nhớ đọc ghi chú của tôi ở điểm # 3 về giá trị sane cho enums. C# có thể chơi một cái gì đó khủng khiếp nếu bạn đúc một số nguyên để một enum mà không có ý nghĩa cho các giá trị nhất định. –